/*
******************************************************************************************************* 
**  Copyright (C) 2019, 苏州检易生物科技有限公司 
**  All rights reserved. 
** 
**  FileName:       	motor_config.h
**  Description:	
**  Author:        	 
**  Version				v0.1
**  Date:           	2019-08-06
**	Function List： 
**  History:         
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*                                              	防止重复包含
*********************************************************************************************************
*/

#ifndef _MOTOR_H_
#define _MOTOR_H_
/*
*********************************************************************************************************
*                                              	调试开关
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              	头文件
*********************************************************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stm32h7xx_hal.h"
#include "product_cfg.h"
#include <rtthread.h>
#include "system_cfg.h"
#include "can_moto_protocol.h"

/*
*********************************************************************************************************
*                                              	宏定义
*********************************************************************************************************
*/
#define		CAN_TPD_POLL_TIME_TICK		5
#define		CAN_MOTOR_POLL_TIME_TICK	20//3

#define		MOTOR_CURRENT_MAX(data)	(data&0x000000FF)
#define		MOTOR_CURRENT_HOLD(data)	((data&0x00FF0000)>>16)
/*
*********************************************************************************************************
*                                              枚举和结构体类型定义
*********************************************************************************************************
*/
typedef enum{
	MOTOR_DISABLE = 0,
	MOTOR_ENABLE 	= 1,
}motor_en_t;


typedef enum{
	MOTOR_STATE_UNINIT,
	MOTOR_STATE_IDLE,	
	MOTOR_STATE_STEP,
	MOTOR_STATE_SPEED,
	MOTOR_STATE_HOMING,
	MOTOR_STATE_SURFACE,
	MOTOR_STATE_HALT,
	MOTOR_STATE_ERR,
}motor_status_t;


typedef struct MOTOR_T
{
	uint8_t 				motor_id;
	motor_status_t 	status;
	int32_t 				tar_pos;
	uint8_t					sdo_cnt;
	uint8_t					surface_status;
	motor_mode_t		mode;
	motor_config_t*	p_motor_config;
	uint32_t				err_code;
	
	void*						p_motor_step;
	void* 					p_task_cb;
	
	int32_t					enc_pos; /*新增编码器位置用于调试*/
}motor_t;

typedef struct{
	uint32_t start_step;
	uint32_t acc_a1;
	uint32_t acc_v1;
	uint32_t acc_max;
	uint32_t v_max;
	uint32_t dec_max;
	uint32_t dec_d1;
	uint32_t stop_speed;
}motor_acc_t;
/*
*********************************************************************************************************
*                                              	全局变量声明
*********************************************************************************************************
*/
extern motor_t m_motor_list[MOTOR_NUM];
/*
*********************************************************************************************************
*                                              	函数声明
*********************************************************************************************************
*/
void motor_config_init(void);
motor_t* get_motor(uint16_t node_id, uint8_t node_index);

motor_t* id_get_motor(uint8_t motor_id);
uint32_t get_motor_current(uint8_t motor_id);
//motor_acc_t* get_motor_acc(uint8_t motor_id);
#endif
